package com.metro.demo.web.controller;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import com.metro.demo.common.beans.constant.PropertiesEnum;
import com.metro.demo.common.utils.resource.Res;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 控制器基类
 * 
 * @author xk
 */
public abstract class BaseController {
	protected Logger log = LoggerFactory.getLogger(BaseController.class);
	
	/**
	 * 设置项目名称
	 * */
	@ModelAttribute()
	public void getSystemName(HttpServletRequest request) {
		request.setAttribute("systemName", PropertiesEnum.getPropertyValue(PropertiesEnum.SYSTEM_NAME));
	}

	/**
	 * 日期类型的转换（yyyy-MM-dd）
	 * 
	 * @param dataBinder
	 */
	@InitBinder
	public void InitBinder(WebDataBinder dataBinder) {
		// 添加一个日期类型编辑器，也就是需要日期类型的时候，怎么把字符串转化为日期类型
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		dateFormat.setLenient(false);
		dataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
	}
	/**
	 * 取得页面视图的路径,如果之类没有重写默认取本Controller 的RequestMapping的value值+"/"
	 * eg:@RequestMapping("/sysuser") 将返回"/sysuser/"
	 * @return ""或者@RequestMapping 的value值+"/"
	 */
	protected String getViewDir(){
		String viewDir = "";
		RequestMapping annotation = this.getClass().getAnnotation(RequestMapping.class);
		if(annotation != null && annotation.value() != null){
			viewDir = annotation.value()[0] + "/";
		}
			
		return viewDir;
	}
	/**
	 * 返回字符串形式的视图名 viewDir + veiwName
	 * @param viewName 视图名
	 * @return
	 */
	public String getView(String viewName){
		String viewDir = getViewDir();
		return viewName != null ?	viewDir + viewName : viewDir;
	}
	/**
	 * 根据当前方法名返回字符串形式的视图名 viewDir + veiwName
	 * @return
	 */
	public String getView(){
		String viewName = Thread.currentThread().getStackTrace()[2].getMethodName();
		return getView(viewName);
	}
}